import Bricks.Core;
import Tool.intArrayTool;
import threds.Print;
import Test.Mydll;

import java.util.Scanner;

///程序的入口
public class Test {
    public static void main(String[] args){
        Core core = new Core();
        Core.modelofNmber = openingtips();  //开局提示，开局确定模式
        Print print = new Print(Core.modelofNmber);
        Thread printThread = new Thread(print);  //打印
        Thread handingThread = new Thread(print);  //搬运
        Thread endInspectionThread = new Thread(print);  //监控
        Thread anticipationThread = new Thread(print);  //预判落点坐标集合制造

        printThread.setName("打印");
        handingThread.setName("搬运");
        endInspectionThread.setName("结束检查");
        anticipationThread.setName("预判制造");
        printThread.start();
        handingThread.start();
        endInspectionThread.start();
        anticipationThread.start();
        move();
    }
    /*
    * 对键盘输入的处理
    * 包括基本的：左移、右移、变形、下移、快速下移
    * 顺带检查游戏结束与否
    * */
    public static void move(){
        while(true){
//            if(intArrayTool.isHasSome(Core.twoArray[4],1)){
//                Core.threadDeath = 0;
//                System.out.println("结束,得分：" + Core.score + "。 按回车重新开始游戏");
//            }

            try{
                int keyInt = Mydll.mydll._getch();  //利用jna，调用C函数库的getch（），获取键盘输入
                //右移
                if(keyInt == 100 && Core.canShiftRight()){   //代表D键（100），那么相应操作为右移
                    //更新方块坐标
                    for(int i = 0; i < Core.movingArray.length-1; i ++){
                        if(i%2 == 0) continue; //纵坐标值不做更改
                        Core.movingArray[i] += 1;  //横坐标往右移动1
                    }
                }
                //左移
                if(keyInt == 97 && Core.canShiftLeft()){   //代表A键（97），那么相应操作为左移
                    //更新方块坐标
                    for(int i = 0; i < Core.movingArray.length-1; i ++){
                        if(i%2 == 0) continue; //纵坐标值不做更改
                        Core.movingArray[i] -= 1;  //横坐标往左移动1
                    }
                }
                //变形
                if(keyInt == 32){   //代表空格键（32），那么相应操作为变形
                        Core.deformation();
                }
                //急速下移
                if(keyInt == 106){   //代表J键（106），那么相应操作为急速下移
                    Core.fastFall();
                }
                //重开
                //思路是：通过控制一个类变量，先让搬运、打印两个线程循环执行体结束循环，那么，这两个线程也就随之死亡，然后新线程诞生
                //新线程启动，这就是重启了
                if(keyInt == 13){    //代表回车键（13），重开
//                    Core.threadDeath = 0;  //这个值为0时，搬运、打印两个线程的while循环中的判断语句将会变为false,两线程死亡，咦好像搬运线程逃过一个死劫
//                    //新的两个线程诞生、启动
//                    Core core = new Core();
//                    Print print = new Print();
//                    Thread printThread = new Thread(print);
//                    Thread handingThread = new Thread(print);
//                    printThread.setName("打印");
//                    handingThread.setName("搬运");
//                    printThread.start();
//                    handingThread.start();
                    //上面的思路错了，其实很简单，我们只需要重置那个被打印的二维数组就可以了呀，诶绕了一大圈,游戏没有结束的重开
                    if(Core.threadDeath == 1) {
                        int modelofNmber = Core.modelofNmber;
                        Core core = new Core();
                        Core.modelofNmber = modelofNmber;
                    }
                    //游戏结束，重新开始游戏
                    else {
                        Core core = new Core();
                        Core.modelofNmber = openingtips();
                        Print print = new Print(Core.modelofNmber);
                        Thread printThread = new Thread(print);
                        Thread handingThread = new Thread(print);
                        Thread endInspectionThread = new Thread(print);
                        Thread anticipationThread = new Thread(print);  //预判落点坐标集合制造
                        printThread.setName("打印");
                        handingThread.setName("搬运");
                        endInspectionThread.setName("结束检查");
                        anticipationThread.setName("预判制造");
                        printThread.start();
                        handingThread.start();
                        endInspectionThread.start();
                        anticipationThread.start();
                    }

                }
            }
            catch ( Exception e){

            }
        }
    }
    public static int openingtips(){
        int modelofNmber = 0;
        boolean go = true;
        while (go){
            System.out.println("1、休闲模式\n2、基础模式\n3、疯狂模式\n4、隐身模式\n5、疯狂隐身模式\n6、倒立模式");
            System.out.print("请选择模式，输入对应序号，按回车开始游戏：");
            Scanner scanner = new Scanner(System.in);
            String model = scanner.nextLine();  //获取到序号
            try{
                modelofNmber = Integer.parseInt(model);
            }
            catch (Exception e){
                System.out.print("输入有误，请重新选择\n");
            }
            if(modelofNmber <= 0 || modelofNmber >=7){
                System.out.println("请输入正确的序号");
            }
            else {
                go = false;
            }
        }
        return modelofNmber;

    }

}
